<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>数据库应用复习 | 月藤的博客</title>
    <meta name="generator" content="VuePress 1.8.0">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/2.10.0/github-markdown.min.css">
    <meta name="description" content="简单的介绍">
    
    <link rel="preload" href="/assets/css/0.styles.a2e941e0.css" as="style"><link rel="preload" href="/assets/js/app.54ea76a2.js" as="script"><link rel="preload" href="/assets/js/2.c554ece5.js" as="script"><link rel="preload" href="/assets/js/40.4252699c.js" as="script"><link rel="prefetch" href="/assets/js/10.95d63e51.js"><link rel="prefetch" href="/assets/js/11.26e082be.js"><link rel="prefetch" href="/assets/js/12.1f62021c.js"><link rel="prefetch" href="/assets/js/13.9096527c.js"><link rel="prefetch" href="/assets/js/14.86142c70.js"><link rel="prefetch" href="/assets/js/15.1adeebc5.js"><link rel="prefetch" href="/assets/js/16.efcc79e4.js"><link rel="prefetch" href="/assets/js/17.74da5698.js"><link rel="prefetch" href="/assets/js/18.fd808b3a.js"><link rel="prefetch" href="/assets/js/19.8dafe26f.js"><link rel="prefetch" href="/assets/js/20.aed54ab4.js"><link rel="prefetch" href="/assets/js/21.341a5670.js"><link rel="prefetch" href="/assets/js/22.ab8b375c.js"><link rel="prefetch" href="/assets/js/23.28489470.js"><link rel="prefetch" href="/assets/js/24.87aae001.js"><link rel="prefetch" href="/assets/js/25.211ca3bf.js"><link rel="prefetch" href="/assets/js/26.afa4c8f0.js"><link rel="prefetch" href="/assets/js/27.9b98f6f3.js"><link rel="prefetch" href="/assets/js/28.93298733.js"><link rel="prefetch" href="/assets/js/29.e8c038c4.js"><link rel="prefetch" href="/assets/js/3.9d562ae1.js"><link rel="prefetch" href="/assets/js/30.27939f01.js"><link rel="prefetch" href="/assets/js/31.6a9774e8.js"><link rel="prefetch" href="/assets/js/32.f698e967.js"><link rel="prefetch" href="/assets/js/33.5ba4bfb8.js"><link rel="prefetch" href="/assets/js/34.dca90861.js"><link rel="prefetch" href="/assets/js/35.768c1bb2.js"><link rel="prefetch" href="/assets/js/36.6b0a867f.js"><link rel="prefetch" href="/assets/js/37.61156e90.js"><link rel="prefetch" href="/assets/js/38.e390246c.js"><link rel="prefetch" href="/assets/js/39.0fbd0dd1.js"><link rel="prefetch" href="/assets/js/4.e18bc6a8.js"><link rel="prefetch" href="/assets/js/41.2e5b5840.js"><link rel="prefetch" href="/assets/js/42.8fe886c7.js"><link rel="prefetch" href="/assets/js/43.7a4b0851.js"><link rel="prefetch" href="/assets/js/44.93c2313d.js"><link rel="prefetch" href="/assets/js/45.33dcea60.js"><link rel="prefetch" href="/assets/js/46.681fdf10.js"><link rel="prefetch" href="/assets/js/47.a842a141.js"><link rel="prefetch" href="/assets/js/48.9a03ba74.js"><link rel="prefetch" href="/assets/js/49.a50266b1.js"><link rel="prefetch" href="/assets/js/5.dc6a2d8c.js"><link rel="prefetch" href="/assets/js/50.f2a42406.js"><link rel="prefetch" href="/assets/js/51.444cc3d8.js"><link rel="prefetch" href="/assets/js/52.cf2befd8.js"><link rel="prefetch" href="/assets/js/53.fbe609f8.js"><link rel="prefetch" href="/assets/js/54.a43fb514.js"><link rel="prefetch" href="/assets/js/55.d0c11641.js"><link rel="prefetch" href="/assets/js/56.c6f114d9.js"><link rel="prefetch" href="/assets/js/57.cc386420.js"><link rel="prefetch" href="/assets/js/58.e747d0f6.js"><link rel="prefetch" href="/assets/js/6.c1fd48f0.js"><link rel="prefetch" href="/assets/js/7.32b39b92.js"><link rel="prefetch" href="/assets/js/8.e2284671.js"><link rel="prefetch" href="/assets/js/9.8def3992.js">
    <link rel="stylesheet" href="/assets/css/0.styles.a2e941e0.css">
  </head>
  <body>
    <div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><!----> <span class="site-name">月藤的博客</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="https://ziphold.gitee.io/blog/#/" target="_blank" rel="noopener noreferrer" class="nav-link external">
  旧博客（停止更新）
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><a href="https://rattonlzh.github.io/homepage/homepage.html" target="_blank" rel="noopener noreferrer" class="nav-link external">
  常用网址导航（停止更新）
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="Select language" class="dropdown-title"><span class="title">Languages</span> <span class="arrow down"></span></button> <button type="button" aria-label="Select language" class="mobile-dropdown-title"><span class="title">Languages</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/知识点总结/数据库应用理论总结.html" class="nav-link">
  zh-CN
</a></li><li class="dropdown-item"><!----> <a href="/en/" class="nav-link">
  en-US
</a></li></ul></div></div> <!----></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><div class="avatar"><img src="/assets/img/avatar.2b77755b.png" alt srcset></div> <div style="z-index: 999"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="298" height="52" src="//music.163.com/outchain/player?type=2&id=28283137&auto=1&height=32"></iframe></div> <nav class="nav-links"><div class="nav-item"><a href="https://ziphold.gitee.io/blog/#/" target="_blank" rel="noopener noreferrer" class="nav-link external">
  旧博客（停止更新）
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><a href="https://rattonlzh.github.io/homepage/homepage.html" target="_blank" rel="noopener noreferrer" class="nav-link external">
  常用网址导航（停止更新）
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="Select language" class="dropdown-title"><span class="title">Languages</span> <span class="arrow down"></span></button> <button type="button" aria-label="Select language" class="mobile-dropdown-title"><span class="title">Languages</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/知识点总结/数据库应用理论总结.html" class="nav-link">
  zh-CN
</a></li><li class="dropdown-item"><!----> <a href="/en/" class="nav-link">
  en-US
</a></li></ul></div></div> <!----></nav>  <ul class="sidebar-links"><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>随便说说</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading open"><span>知识点总结</span> <span class="arrow down"></span></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/知识点总结/git总结.html" class="sidebar-link">git总结</a></li><li><a href="/知识点总结/java单元测试总结.html" class="sidebar-link">java测试</a></li><li><a href="/知识点总结/jquery总结.html" class="sidebar-link">jquery初探</a></li><li><a href="/知识点总结/js总结.html" class="sidebar-link">js易错点</a></li><li><a href="/知识点总结/kotlin语法总结.html" class="sidebar-link">kotlin语法入门</a></li><li><a href="/知识点总结/latex总结.html" class="sidebar-link">latex常用代码</a></li><li><a href="/知识点总结/PS总结.html" class="sidebar-link">PS总结</a></li><li><a href="/知识点总结/springboot总结.html" class="sidebar-link">springboot进行web开发总结</a></li><li><a href="/知识点总结/thinkphp总结.html" class="sidebar-link">thinkphp入坑</a></li><li><a href="/知识点总结/uml软件建模总结.html" class="sidebar-link">uml软件建模总结</a></li><li><a href="/知识点总结/人工智能总结.html" class="sidebar-link">人工智能总结</a></li><li><a href="/知识点总结/大数据软件工程总结.html" class="sidebar-link">大数据软件工程总结</a></li><li><a href="/知识点总结/常用快捷键总结.html" class="sidebar-link">第一篇博客</a></li><li><a href="/知识点总结/数字图像处理总结.html" class="sidebar-link">数字图像处理知识点</a></li><li><a href="/知识点总结/数据库应用理论总结.html" class="active sidebar-link">数据库应用复习</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#数据产生的被动、主动和自动三个阶段" class="sidebar-link">数据产生的被动、主动和自动三个阶段</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#商用服务器总类" class="sidebar-link">商用服务器总类</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#myisam-与-innodb" class="sidebar-link">MyISAM 与 InnoDB</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#大型数据库的架构设计方法" class="sidebar-link">大型数据库的架构设计方法</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#业务连续性" class="sidebar-link">业务连续性</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#系统可用性" class="sidebar-link">系统可用性</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#非结构化数据处理" class="sidebar-link">非结构化数据处理</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#相似度计算" class="sidebar-link">相似度计算</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#nosql数据库的特点" class="sidebar-link">NoSQL数据库的特点</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#mecached数据库与redis数据库" class="sidebar-link">mecached数据库与redis数据库</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#sequoia数据库" class="sidebar-link">sequoia数据库</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#hbase数据库" class="sidebar-link">hbase数据库</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#mongodb数据库" class="sidebar-link">mongodb数据库</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#数据仓库定义" class="sidebar-link">数据仓库定义</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#oltp-与olap的区别" class="sidebar-link">OLTP 与OLAP的区别</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#事实表与维表" class="sidebar-link">事实表与维表</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#数据仓库的模型" class="sidebar-link">数据仓库的模型</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#度量的三种分类" class="sidebar-link">度量的三种分类</a></li><li class="sidebar-sub-header"><a href="/知识点总结/数据库应用理论总结.html#三种数据仓库模型" class="sidebar-link">三种数据仓库模型</a></li></ul></li><li><a href="/知识点总结/数据库系统概念总结.html" class="sidebar-link">数据库系统概念总结</a></li><li><a href="/知识点总结/数据挖掘总结.html" class="sidebar-link">数据挖掘总结</a></li><li><a href="/知识点总结/设计模式总结.html" class="sidebar-link">设计模式</a></li></ul></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>考研专区</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>读书笔记</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>开发资料</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>配置记录</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>思维导图</span> <span class="arrow right"></span></p> <!----></section></li><li><a href="/friend_link.html" class="sidebar-link">友情链接</a></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="数据库应用理论总结"><a href="#数据库应用理论总结" class="header-anchor">#</a> 数据库应用理论总结</h1> <h2 id="数据产生的被动、主动和自动三个阶段"><a href="#数据产生的被动、主动和自动三个阶段" class="header-anchor">#</a> 数据产生的被动、主动和自动三个阶段</h2> <h3 id="运营式系统阶段"><a href="#运营式系统阶段" class="header-anchor">#</a> 运营式系统阶段</h3> <p>数据库的出现使得数据管理的复杂度大大降低，实际中数据库大都为运营系统所采用， 作为运营系统的数据管理子系统。比如超市的销售记录系统，银行的交易记录系统、 医院病人的医疗记录等。人类社会数据量第一次大的飞跃正是建立在运营式系统开始 广泛使用数据库开始。这个阶段最主要特点是数据往往伴随着一定的运营活动而产生 并记录在数据库中的，比如超市每销售出一件产品就会在数据库中产生相应的一条销 售记录。这种数据的产生方式是被动的。</p> <h3 id="用户原创内容阶段"><a href="#用户原创内容阶段" class="header-anchor">#</a> 用户原创内容阶段</h3> <p>互联网的诞生促使人类社会数据量出现第二次大的飞跃。但是真正的数据爆发产生于 Web 2.0 时代，而Web 2.0 的最重要标志就是用户原创内容（UGC,User Generated Content）。这类数据近几年一直呈现爆炸性的增长，主要有两个方面的原因。首先 是以博客、微博为代表的新型社交网络的出现和快速发展，使得用户产生数据的意愿 更加强烈。其次就是以智能手机、平板电脑为代表的新型移动设备的出现，这些易携 带、全天候接入网络的移动设备使得人们在网上发表自己意见的途径更为便捷。这个 阶段数据的产生方式是主动的。</p> <h3 id="感知式系统阶段"><a href="#感知式系统阶段" class="header-anchor">#</a> 感知式系统阶段</h3> <p>人类社会数据量第三次大的飞跃最终导致了大数据的产生，今天我们正处于这个阶段。 这次飞跃的根本原因在于感知式系统的广泛使用。随着技术的发展，人们已经有能力 制造极其微小的带有处理功能的传感器，并开始将这些设备广泛的布置于社会的各个 角落，通过这些设备来对整个社会的运转进行监控。这些设备会源源不断的产生新数 据，这种数据的产生方式是自动的。</p> <h2 id="商用服务器总类"><a href="#商用服务器总类" class="header-anchor">#</a> 商用服务器总类</h2> <ol><li>对称多处理结构 SMP</li> <li>非一致存储访问结构 NUMA</li> <li>海量并行处理结构  MPP</li></ol> <h2 id="myisam-与-innodb"><a href="#myisam-与-innodb" class="header-anchor">#</a> MyISAM 与 InnoDB</h2> <p>.frm 是表定义文件</p> <h3 id="myisam特点"><a href="#myisam特点" class="header-anchor">#</a> MyISAM特点</h3> <p>MyISAM使用b+树索引，用三个文件表示一个表，<code>.myi,myd,.frm</code>
访问数据时所有数据库引擎中最快的
table level lock，性能较差，适合读操作更多的表
可以索引压缩，少碎片，支持大文件
不支持事务，外键约束等数据库特性
二进制文件可以移植
单表存储容量有限，建议50w~200w</p> <h3 id="innodb特点"><a href="#innodb特点" class="header-anchor">#</a> InnoDB特点</h3> <p>InnoDB用两个文件表示一个表 <code>.ibd,.frm</code>
使用table space的方式存储表
存储容量大
支持数据库事务
关闭自动提交时，性能与MyISAM相当
row level lock，读写性能好
有独立的缓存池，缓存数据和索引</p> <h2 id="大型数据库的架构设计方法"><a href="#大型数据库的架构设计方法" class="header-anchor">#</a> 大型数据库的架构设计方法</h2> <h3 id="基本概念"><a href="#基本概念" class="header-anchor">#</a> 基本概念</h3> <ol><li>可扩展性（可伸缩性）：系统适应不断增长的用户数的能力</li> <li>高可用性：某些服务在任何时间都可以访问并在可预期的合理时间周期内有响应</li> <li>负载均衡：集群技术将请求分发到不同的服务器上以获得较好高可用性和较好的性能</li></ol> <p>容错（Fault tolerance）：不管有多少错误，容错的服务能确保有严格正确的行为</p> <p>失效转移（Failover）：当一个结点失效时，通过选择集群的另一个结点，使处理继续进行</p> <p>等幂方法（idempotent methods）：重复相同的参数调用可以得到相同的结果</p> <h3 id="acid"><a href="#acid" class="header-anchor">#</a> ACID</h3> <p>原子性-atomicity：要么不做，要么全做</p> <p>一致性-consistency：写入的数据满足定义的约束规则</p> <p>隔离性-isolation：并发执行的事务如同串行执行，保证 系统状态的一致性</p> <p>持久性-duration：一旦提交，即便断电、crash也不会丢失数据</p> <h3 id="数据库的扩展性scalable"><a href="#数据库的扩展性scalable" class="header-anchor">#</a> 数据库的扩展性Scalable</h3> <ol><li>Scale up：纵向扩展：提高单体性能， 高端设备升级成本高，受当前科技影响和厂家限制，设备和数据集中，发生故障影响较大</li> <li>Scale out：横向扩展：增加机器数量，成本低，容易实现，集群维护难度高</li></ol> <h3 id="扩展性好的数据库设计原则"><a href="#扩展性好的数据库设计原则" class="header-anchor">#</a> 扩展性好的数据库设计原则</h3> <ol><li>事务相关性最小原则：设计合理切分规则，尽可能让一个事务所需数据在同一个服务器上，避免分布式事务</li> <li>数据一致性：在保证扩展性的前提下保证数据可用性。使用BASE模型，基本可用，柔软状态和最终一致</li> <li>高可用及数据安全原则：支持可扩展的前提下保证高可用和数据安全</li></ol> <h3 id="并行计算体系结构"><a href="#并行计算体系结构" class="header-anchor">#</a> 并行计算体系结构</h3> <p>share memory：多cpu共享内存，通过内部通讯机制（interconnection network）通讯</p> <p>share disk：多cpu有各自私自的内存，通过内部通讯机制访问所有磁盘系统</p> <p>share nothing：每个cpu有各自的内存和磁盘，通过网络连接通讯</p> <h3 id="sharding策略"><a href="#sharding策略" class="header-anchor">#</a> SHARDING策略</h3> <p>垂直策略：不同的表切分到不同的数据库</p> <p>横向：同一张表的记录按某种逻辑关系切分到不同的数据库1</p> <h4 id="垂直策略的优点"><a href="#垂直策略的优点" class="header-anchor">#</a> 垂直策略的优点：</h4> <ol><li><p>拆分规则明确</p></li> <li><p>应用程序模块清晰，整合容易</p></li> <li><p>数据维护容易</p></li></ol> <h4 id="垂直策略的缺点"><a href="#垂直策略的缺点" class="header-anchor">#</a> 垂直策略的缺点：</h4> <ol><li>部分表关联无法在数据库中完成</li> <li>对访问频繁且数据量大的表仍存在性能瓶颈</li> <li>事务处理复杂</li> <li>切分到一定程度，扩展性会受到限制</li> <li>过渡切分会使系统过渡复杂难以维护</li></ol> <h4 id="横向切分优点"><a href="#横向切分优点" class="header-anchor">#</a> 横向切分优点</h4> <ol><li>表关联基本能在数据库级别完成</li> <li>不存在高数据量的表遇到瓶颈的问题</li> <li>只要切分合理，基本难以限制扩展性</li> <li>事务处理简单</li> <li>对应用端的程序架构改动较少</li></ol> <h4 id="横向切分缺点"><a href="#横向切分缺点" class="header-anchor">#</a> 横向切分缺点</h4> <ol><li>切分规则复杂，很难抽象出一个满足整个数据库的切分规则</li> <li>后期数据维护困难</li> <li>应用系统各模块耦合度较大，对后期数据迁移拆分造成困难</li></ol> <h2 id="业务连续性"><a href="#业务连续性" class="header-anchor">#</a> 业务连续性</h2> <p>根据预定义的服务级别协议正常连续地经营重要服务</p> <p>包括高可用性和灾难恢复性。</p> <p>灾难恢复性：抵御所有中断，为重要程序提供连续处理能力，最终目标让中断时间少于总服务时间的0.001%</p> <p>高可用性：更苛刻的恢复时间目标（几秒到数分钟）和恢复点目标（零用户中断）</p> <h2 id="系统可用性"><a href="#系统可用性" class="header-anchor">#</a> 系统可用性</h2> <p>在特定时间和特定条件系统的正常工作程度</p> <p>测量方式：可用性的平均值=MTBF/(MTBF+MTTR),</p> <p>MTBF：平均故障间隔时间</p> <p>MTTR：平均故障修复时间</p> <h3 id="完美性与避错技术"><a href="#完美性与避错技术" class="header-anchor">#</a> 完美性与避错技术</h3> <p>完美性追求一种避错技术，即避免出错。要求组成系统的各个部件、 器件具有高可用性，不允许出错，或者出错率降至最低。</p> <ul><li>硬件的可用性与完美性 : 指元器件的完美性、部件的完美性、整机与系统的完美性</li> <li>软件的可用性与完美性 : 指软件的正确性、完美性、兼容性</li></ul> <h3 id="容错性与容错技术"><a href="#容错性与容错技术" class="header-anchor">#</a> 容错性与容错技术</h3> <ul><li><p>容错技术：在一定程度上容忍故障的技术</p></li> <li><p>容错系统：采用容错技术的系统。当系统因某种原因出错或者失效，系统能够继续工作，程序能够继续运行，不会因计算机故障而中止或被修改，执行结果也不包含系统中故障引起的差错。</p></li> <li><p>容错技术也称为故障掩盖技术(fault masking)。</p></li> <li><p>冗余技术是容错技术的重要结构，它以增加资源的办法换取可 用性。由于资源的不同，冗余技术分为硬件冗余、软件冗余、 时间冗余和信息冗余。资源与成本按线性增加，而故障概率则 可按对数规律下降。</p></li> <li><p>冗余要消耗资源，应当在可用性与资源消耗之间进行权衡和折 衷。</p></li></ul> <h3 id="replication-机制的实现原理"><a href="#replication-机制的实现原理" class="header-anchor">#</a> REPLICATION 机制的实现原理</h3> <ul><li>MySQL的 Replication 是一个异步的复制过程，从一个 MySQL instance（我们称之为 Master）复制到另一个 MySQL instance（我们称之 Slave）。在 Master 与 Slave 之 间的实现整个复制过程主要由三个线程来完成，其中两个线程 （SQL线程和IO线程）在 Slave 端，另外一个线程（IO线程） 在 Master 端。</li></ul> <h3 id="mysql-复制的基本过程"><a href="#mysql-复制的基本过程" class="header-anchor">#</a> MYSQL 复制的基本过程</h3> <ol><li>首先必须打开 Master 端的Binary Log（mysql-bin.xxxxxx） 功能</li> <li>Slave 上面的IO线程连接上 Master，并请求从指定日志文件的指定位置（或者 从最开始的日志）读取之后的日志内容；</li> <li>Master 接收到来自 Slave 的 IO 线程的请求后，通过负责复制的 IO 线程根据 请求信息读取指定日志指定位置之后的日志信息，返回给 Slave 端的 IO 线程。 返回信息中除了日志所包含的信息之外，还包括本次返回的信息在 Master 端 的 Binary Log 文件的名称以及在 Binary Log 中的位置；</li> <li>Slave 的 IO 线程接收到信息后，将接收到的日志内容依次写入到 Slave 端的 Relay Log文件(mysql-relay-bin.xxxxxx)的最末端，并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中，以便在下一次读取的时候 能够清楚的告诉Master。“我需要从某个bin-log的哪个位置开始往后的日志内容， 请发给我”</li> <li>Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后，会马上解析该 Log 文件中的内容成为在 Master 端真实执行时候的那些可执行的 Query 语句，并 在自身执行这些 Query。这样，实际上就是在 Master 端和 Slave 端执行了同 样的 Query，所以两端的数据是完全一样的。</li></ol> <h3 id="常见复制架构"><a href="#常见复制架构" class="header-anchor">#</a> 常见复制架构</h3> <p>对于数据实时性要求不是特 别 Critical 的应用，只需要 通过廉价的pc server来扩 展 Slave 的数量，将读压 力分散到多台 Slave 的机 器上面，即可通过分散单台 数据库服务器的读压力来解 决数据库端的读性能瓶颈</p> <h3 id="dual-master-复制架构-master-master"><a href="#dual-master-复制架构-master-master" class="header-anchor">#</a> DUAL MASTER 复制架构(MASTER - MASTER)</h3> <p>Dual Master 环境就是两个 MySQL Server 互相将对方作为自己的 Master，自己作为对方的 Slave 来进行复制。这 样，任何一方所做的变更，都 会通过复制应用到另外一方的数据库中。</p> <h3 id="级联复制架构-master-slaves-slaves"><a href="#级联复制架构-master-slaves-slaves" class="header-anchor">#</a> 级联复制架构(MASTER - SLAVES - SLAVES ...)</h3> <p>有些应用场景中，可能读写压力差别比较大，读压力特别的大，一 个 Master 可能需要上10台甚至更多的 Slave 才能够支撑注读的压 力。复制就会消耗较多的资源，很容易造成复制的延时。</p> <h3 id="dual-master-与级联复制结合架构-master-master-slaves"><a href="#dual-master-与级联复制结合架构-master-master-slaves" class="header-anchor">#</a> DUAL MASTER 与级联复制结合架构(MASTER - MASTER - SLAVES)</h3> <p>MMS同时解决 Master 因为所附属的 Slave 过多而成为瓶颈的问题，及解决人工维护和出现异常需要切换后可能存在重新搭建 Replication 的问题。</p> <h3 id="m-s复制-s故障的情况"><a href="#m-s复制-s故障的情况" class="header-anchor">#</a> M-S复制——S故障的情况</h3> <p>当我们的 Slave 集群中的一台Slave C 出现故障 crash 之后， 整个系统的变化仅仅只是从 Master 至 Slave C 的复制中断， 客户端应用的 Read 请求也不能再访问 Slave C。当时其他所 有的 MySQL Server 在不需要任何调整的 情况下就能正常工作。 客户端的请求 Read 请求全部由 Slave A 和 Slave B 来承担。</p> <h3 id="m-s复制-m故障的情况"><a href="#m-s复制-m故障的情况" class="header-anchor">#</a> M-S复制——M故障的情况</h3> <p>当 Master 出现问题后所有客户端的 Write 请求就无法处理，这时可以有如下两种解决方案：</p> <ul><li>一个是将 Slave 中的某一台切换成 Master 对外提供服务，同时将其他所有的 Slave 都以通过 CHANGE MASTER TO命令来将通过新的 Master 进行复制。</li> <li>另一个方案就是新增一台Master，也就是 Dual Master 的解决方案</li></ul> <h3 id="通过-dual-master-来-解决-master-的单点问题"><a href="#通过-dual-master-来-解决-master-的单点问题" class="header-anchor">#</a> 通过 DUAL MASTER 来 解决 MASTER 的单点问题</h3> <p>我们通过两台 MySQL Server 搭建成 Dual Master 环境，正常情况下，所有客户端的 Write 请求都写往 Master A，然后通过 Replication 将 Master A 复制到 Master B。一旦 Master A 出现问题之后，所有的 Write 请求都转向 Master B。而在正常情况下，当 Master B 出现问题的时候，实际上不论是数据库还是客户端的请求，都不会受到实质性的影响。 特点就是在 Master 出现故障之后的处理比较简单，可控性比较大。而弊端就是需要增加一台 MySQL 服务器， 在成本方面投入更大。</p> <h3 id="m-m-s复制-s故障的情况"><a href="#m-m-s复制-s故障的情况" class="header-anchor">#</a> M-M-S复制——S故障的情况</h3> <p>考虑 Slave 出现异常的情况。 在这个架构中，Slave 出现 异常后的处理情况和普通的 Master - Slave 架构的处理 方式完全一样，仅仅需要在 应用访问 Slave 集群的访问 配置中去掉一个 Slave 节点 即可解决
不论是通过应用程序自己判 断，还是通过硬件解决方案， 都可以很容易的实现。</p> <h3 id="m-m-s复制-当-master-a-出现故障之后的处理方案"><a href="#m-m-s复制-当-master-a-出现故障之后的处理方案" class="header-anchor">#</a> M-M-S复制——当 MASTER A 出现故障之后的处理方案</h3> <p>当 Master A 出现故障 crash 之 后，Master A 与 Master B 之 间的复制将中断，所有客户端 向 Master A 的 Write 请求都必 须转向 Master B。
这个转向动作的实现，可以通 过VIP 的方式实现。 由于之前所有的 Slave 就都是 从 Master B 来实现复制，所以 Slave 集群不会受到任何的影响， 客户端的所有 Read 请求也就 不会受到任何的影响，整个过 程可以完全自动进行，不需要 任何的人为干预。</p> <h3 id="m-m-s复制-当-master-b-出现故障之后的情况又如何"><a href="#m-m-s复制-当-master-b-出现故障之后的情况又如何" class="header-anchor">#</a> M-M-S复制——当 MASTER B 出现故障之后的情况又如何</h3> <p>首先可以确定的是我们的所有 Write 请求都不会受到任何影响， 而且所有的 Read 请求也都还是能 够正常访问。 但所有 Slave 的复制都会中断， Slave 上面的数据会开始出现滞后 的现象。 需要做的就是将所有的 Slave 进行 CHANGE MASTER TO 操作，改 为从 Master A 进行复制。由于所 有 Slave 的复制都不可能超前最初 的数据源，所以可以根据 Slave 上 面的 Relay Log 中的时间戳信息与 Master A 中的时间戳信息进行对 照来找到准确的复制起始点，不会造成任何的数据丢失。</p> <h3 id="base"><a href="#base" class="header-anchor">#</a> BASE</h3> <p><strong>基本可用</strong> 数据能够保证80%一致 性就够了，剩下20%就 不要过于纠结了。可参 考八二定律</p> <p><strong>软状态</strong> 可以理解为无连接的， 而Hard state是面向连接 的。Soft state可以有一 段时间不同步，异步</p> <p><strong>最终一致性</strong> 在某一段短时间内允许数 据不一致，但经过一段较 长时间，等所有节点上数 据的拷贝都整合在一起的 时候，数据会最终达到完 全一致</p> <h3 id="架构设计理论与原则"><a href="#架构设计理论与原则" class="header-anchor">#</a> 架构设计理论与原则</h3> <ol><li><strong>一致性</strong> 分布式系统中，数据一般会存储在不同节点， 一致性就是要保证对数据操作的原子性</li> <li><strong>可用性</strong> 确保客户访问数据时可得 到响应。不强调各个节点 上数据要保持一致性。</li> <li><strong>分区容忍性</strong> 数据分区存储后，即使部分分区组件不可用，其施加的操作也能够完成</li></ol> <h2 id="非结构化数据处理"><a href="#非结构化数据处理" class="header-anchor">#</a> 非结构化数据处理</h2> <p>信息检索是从大规模非结构化数据（通常是文本）的集合（通常保存在计算机上）中找出满足用户信息需求的资料（通常是文档）的 过程。 Document –文档 Unstructured – 非结构化 Information need –信息需求 Collection—文档集、语料库</p> <h3 id="ir中的基本假设"><a href="#ir中的基本假设" class="header-anchor">#</a> IR中的基本假设</h3> <p>文档集Collection: 由固定数目的文档组成 目标: 返回与用户需求相关的文档并辅助用户来完成某项任务相关性Relevance：</p> <ul><li>主观的概念</li> <li>反映对象的匹配程度</li> <li>不同应用相关性不同</li></ul> <h3 id="检索效果的评价"><a href="#检索效果的评价" class="header-anchor">#</a> 检索效果的评价</h3> <p>正确率(Precision) : 返回结果文档中正确的比例。如返 回80篇文档，其中20篇相关，正确率1/4。</p> <p>召回率(Recall) : 全部相关文档中被返回的比例，如返 回80篇文档，其中20篇相关，但是总的应该相关的文档 是100篇，召回率1/5。</p> <p>正确率和召回率反映检索效果的两个方面，缺一不可。</p> <p>• 全部返回，正确率低，召回率100%</p> <p>• 只返回一个非常可靠的结果，正确率100%，召回率低</p> <h3 id="布尔检索"><a href="#布尔检索" class="header-anchor">#</a> 布尔检索</h3> <p>针对布尔查询的检索，布尔查询是指利用 AND, OR 或者NOT 操作符将词项连接起来的查询。</p> <h3 id="关联向量-incidence-vectors"><a href="#关联向量-incidence-vectors" class="header-anchor">#</a> 关联向量(INCIDENCE VECTORS)</h3> <p>关联矩阵的每一列都是 0/1向量，每个0/1都对应一个词 项 给定查询Brutus AND Caesar AND NOT Calpurnia 取出三个列向量 ，并对Calpurnia 的列向量求补，最后 按位进行与操作
110100 AND 110111 AND 101111 = 100100.</p> <h2 id="相似度计算"><a href="#相似度计算" class="header-anchor">#</a> 相似度计算</h2> <p>Jaccard系数：<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>J</mi><mi>A</mi><mi>C</mi><mi>C</mi><mi>A</mi><mi>R</mi><mi>D</mi><mo>(</mo><mi>A</mi><mo separator="true">,</mo><mi>B</mi><mo>)</mo><mo>=</mo><mfrac><mrow><mi>A</mi><mo>∩</mo><mi>B</mi></mrow><mrow><mi>A</mi><mo>∪</mo><mi>B</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">JACCARD(A,B)=\frac{A\cap B}{A \cup B}</annotation></semantics></math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.872331em;"></span><span class="strut bottom" style="height:1.217331em;vertical-align:-0.345em;"></span><span class="base textstyle uncramped"><span class="mord mathit" style="margin-right:0.09618em;">J</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.07153em;">C</span><span class="mord mathit" style="margin-right:0.07153em;">C</span><span class="mord mathit">A</span><span class="mord mathit" style="margin-right:0.00773em;">R</span><span class="mord mathit" style="margin-right:0.02778em;">D</span><span class="mopen">(</span><span class="mord mathit">A</span><span class="mpunct">,</span><span class="mord mathit" style="margin-right:0.05017em;">B</span><span class="mclose">)</span><span class="mrel">=</span><span class="mord reset-textstyle textstyle uncramped"><span class="sizing reset-size5 size5 reset-textstyle textstyle uncramped nulldelimiter"></span><span class="mfrac"><span class="vlist"><span style="top:0.345em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord scriptstyle cramped"><span class="mord mathit">A</span><span class="mbin">∪</span><span class="mord mathit" style="margin-right:0.05017em;">B</span></span></span></span><span style="top:-0.22999999999999998em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle textstyle uncramped frac-line"></span></span><span style="top:-0.394em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle uncramped"><span class="mord scriptstyle uncramped"><span class="mord mathit">A</span><span class="mbin">∩</span><span class="mord mathit" style="margin-right:0.05017em;">B</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span><span class="sizing reset-size5 size5 reset-textstyle textstyle uncramped nulldelimiter"></span></span></span></span></span></p> <h3 id="词项频率tf"><a href="#词项频率tf" class="header-anchor">#</a> 词项频率tf</h3> <p><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>t</mi><msub><mi>f</mi><mrow><mi>t</mi><mo separator="true">,</mo><mi>d</mi></mrow></msub></mrow><annotation encoding="application/x-tex">tf_{t,d}</annotation></semantics></math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.980548em;vertical-align:-0.286108em;"></span><span class="base textstyle uncramped"><span class="mord mathit">t</span><span class="mord"><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="vlist"><span style="top:0.15em;margin-right:0.05em;margin-left:-0.10764em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord scriptstyle cramped"><span class="mord mathit">t</span><span class="mpunct">,</span><span class="mord mathit">d</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span></span></span></span>为t在文档d中出现的次数（词项频率实际为频数）</p> <h3 id="文档-词项的匹配得分"><a href="#文档-词项的匹配得分" class="header-anchor">#</a> 文档-词项的匹配得分</h3> <p>匹配得分 = <span class="katex"><span class="katex-mathml"><math><semantics><mrow><msub><mo>∑</mo><mrow><mi>t</mi><mo>∈</mo><mi>q</mi><mo>∩</mo><mi>d</mi></mrow></msub><mo>(</mo><mn>1</mn><mo>+</mo><mi>l</mi><mi>o</mi><mi>g</mi><mtext></mtext><mi>t</mi><msub><mi>f</mi><mrow><mi>t</mi><mo separator="true">,</mo><mi>d</mi></mrow></msub><mo>)</mo></mrow><annotation encoding="application/x-tex">\sum_{t\in q\cap d}(1+log \  tf_{t,d})</annotation></semantics></math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1.186118em;vertical-align:-0.436118em;"></span><span class="base textstyle uncramped"><span class="mop"><span class="op-symbol small-op mop" style="top:-0.0000050000000000050004em;">∑</span><span class="vlist"><span style="top:0.30001em;margin-right:0.05em;margin-left:0em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord scriptstyle cramped"><span class="mord mathit">t</span><span class="mrel">∈</span><span class="mord mathit" style="margin-right:0.03588em;">q</span><span class="mbin">∩</span><span class="mord mathit">d</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span><span class="mopen">(</span><span class="mord mathrm">1</span><span class="mbin">+</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">o</span><span class="mord mathit" style="margin-right:0.03588em;">g</span><span class="mord mspace"></span><span class="mord mathit">t</span><span class="mord"><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="vlist"><span style="top:0.15em;margin-right:0.05em;margin-left:-0.10764em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord scriptstyle cramped"><span class="mord mathit">t</span><span class="mpunct">,</span><span class="mord mathit">d</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span><span class="mclose">)</span></span></span></span></p> <h3 id="文档频率df"><a href="#文档频率df" class="header-anchor">#</a> 文档频率df</h3> <p>文档频率指出现词项的文档数目</p> <h3 id="idf权重"><a href="#idf权重" class="header-anchor">#</a> idf权重</h3> <p><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>i</mi><mi>d</mi><msub><mi>f</mi><mi>t</mi></msub><mo>=</mo><mi>l</mi><mi>o</mi><msub><mi>g</mi><mrow><mn>1</mn><mn>0</mn></mrow></msub><mfrac><mrow><mi>N</mi></mrow><mrow><mi>d</mi><msub><mi>f</mi><mi>t</mi></msub></mrow></mfrac></mrow><annotation encoding="application/x-tex">idf_t=log_{10}\frac{N}{df_t}</annotation></semantics></math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.872331em;"></span><span class="strut bottom" style="height:1.3534389999999998em;vertical-align:-0.481108em;"></span><span class="base textstyle uncramped"><span class="mord mathit">i</span><span class="mord mathit">d</span><span class="mord"><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="vlist"><span style="top:0.15em;margin-right:0.05em;margin-left:-0.10764em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord mathit">t</span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span><span class="mrel">=</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">o</span><span class="mord"><span class="mord mathit" style="margin-right:0.03588em;">g</span><span class="vlist"><span style="top:0.15em;margin-right:0.05em;margin-left:-0.03588em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord scriptstyle cramped"><span class="mord mathrm">1</span><span class="mord mathrm">0</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span><span class="mord reset-textstyle textstyle uncramped"><span class="sizing reset-size5 size5 reset-textstyle textstyle uncramped nulldelimiter"></span><span class="mfrac"><span class="vlist"><span style="top:0.345em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord scriptstyle cramped"><span class="mord mathit">d</span><span class="mord"><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="vlist"><span style="top:0.15em;margin-right:0.07142857142857144em;margin-left:-0.10764em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-scriptstyle scriptscriptstyle cramped"><span class="mord mathit">t</span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span></span></span></span><span style="top:-0.22999999999999998em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle textstyle uncramped frac-line"></span></span><span style="top:-0.394em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle uncramped"><span class="mord scriptstyle uncramped"><span class="mord mathit" style="margin-right:0.10903em;">N</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span><span class="sizing reset-size5 size5 reset-textstyle textstyle uncramped nulldelimiter"></span></span></span></span></span></p> <p><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>d</mi><msub><mi>f</mi><mi>t</mi></msub></mrow><annotation encoding="application/x-tex">df_t</annotation></semantics></math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathit">d</span><span class="mord"><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="vlist"><span style="top:0.15em;margin-right:0.05em;margin-left:-0.10764em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord mathit">t</span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span></span></span></span>是文档频率，N是文档集的文档数目</p> <h3 id="tf-idf权重计算"><a href="#tf-idf权重计算" class="header-anchor">#</a> tf-idf权重计算</h3> <p>tf-idf权重是tf权重和idf权重的乘积</p> <p><span class="katex"><span class="katex-mathml"><math><semantics><mrow><msub><mi>w</mi><mrow><mi>t</mi><mo separator="true">,</mo><mi>d</mi></mrow></msub><mo>=</mo><mo>(</mo><mn>1</mn><mo>+</mo><mi>l</mi><mi>o</mi><msub><mi>g</mi><mrow><mi>t</mi><msub><mi>f</mi><mrow><mi>t</mi><mo separator="true">,</mo><mi>d</mi></mrow></msub></mrow></msub><mo>)</mo><mi>l</mi><mi>o</mi><mi>g</mi><mtext></mtext><mfrac><mrow><mi>N</mi></mrow><mrow><mi>d</mi><msub><mi>f</mi><mrow><mi>t</mi></mrow></msub></mrow></mfrac></mrow><annotation encoding="application/x-tex">w_{t,d} = (1+log_{tf_{t,d}})log \ \frac{N}{df_{t}}</annotation></semantics></math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.872331em;"></span><span class="strut bottom" style="height:1.3534389999999998em;vertical-align:-0.481108em;"></span><span class="base textstyle uncramped"><span class="mord"><span class="mord mathit" style="margin-right:0.02691em;">w</span><span class="vlist"><span style="top:0.15em;margin-right:0.05em;margin-left:-0.02691em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord scriptstyle cramped"><span class="mord mathit">t</span><span class="mpunct">,</span><span class="mord mathit">d</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span><span class="mrel">=</span><span class="mopen">(</span><span class="mord mathrm">1</span><span class="mbin">+</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">o</span><span class="mord"><span class="mord mathit" style="margin-right:0.03588em;">g</span><span class="vlist"><span style="top:0.15em;margin-right:0.05em;margin-left:-0.03588em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord scriptstyle cramped"><span class="mord mathit">t</span><span class="mord"><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="vlist"><span style="top:0.15122857142857138em;margin-right:0.07142857142857144em;margin-left:-0.10764em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-scriptstyle scriptscriptstyle cramped"><span class="mord scriptscriptstyle cramped"><span class="mord mathit">t</span><span class="mpunct">,</span><span class="mord mathit">d</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span><span class="mclose">)</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">o</span><span class="mord mathit" style="margin-right:0.03588em;">g</span><span class="mord mspace"></span><span class="mord reset-textstyle textstyle uncramped"><span class="sizing reset-size5 size5 reset-textstyle textstyle uncramped nulldelimiter"></span><span class="mfrac"><span class="vlist"><span style="top:0.345em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord scriptstyle cramped"><span class="mord mathit">d</span><span class="mord"><span class="mord mathit" style="margin-right:0.10764em;">f</span><span class="vlist"><span style="top:0.15em;margin-right:0.07142857142857144em;margin-left:-0.10764em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-scriptstyle scriptscriptstyle cramped"><span class="mord scriptscriptstyle cramped"><span class="mord mathit">t</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span></span></span></span><span style="top:-0.22999999999999998em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle textstyle uncramped frac-line"></span></span><span style="top:-0.394em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle uncramped"><span class="mord scriptstyle uncramped"><span class="mord mathit" style="margin-right:0.10903em;">N</span></span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span><span class="sizing reset-size5 size5 reset-textstyle textstyle uncramped nulldelimiter"></span></span></span></span></span></p> <p>随着词项频率的增大而增大 ,随着词项罕见度的增加而增大</p> <h3 id="文档表示成向量"><a href="#文档表示成向量" class="header-anchor">#</a> 文档表示成向量</h3> <p>每篇文档表示成一个基于tf-idf权重的实值向量 ∈ R| V |.</p> <p>我们有一个 | V |维实值空间</p> <p>空间的每一维都对应词项</p> <p>文档都是该空间下的一个点或者向量</p> <p>极高维向量：对于Web搜索引擎，空间会上千万维</p> <p>对每个向量来说又非常稀疏，大部分都是0</p> <h3 id="查询和文档之间的余弦相似度计算"><a href="#查询和文档之间的余弦相似度计算" class="header-anchor">#</a> 查询和文档之间的余弦相似度计算</h3>
cos(\vec{q},\vec{d})=\frac{\sum_{i=1}^{|V|} q_id_i}{\sqrt{\sum_{i=1}^{|V|}q_i^2\sum_{i=1}{|V|}d_i^2}}$


<p><span class="katex"><span class="katex-mathml"><math><semantics><mrow><msub><mi>q</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">q_i</annotation></semantics></math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.43056em;"></span><span class="strut bottom" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord"><span class="mord mathit" style="margin-right:0.03588em;">q</span><span class="vlist"><span style="top:0.15em;margin-right:0.05em;margin-left:-0.03588em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord mathit">i</span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span></span></span></span>是第i个词项在查询q中的tf-idf权重</p> <p><span class="katex"><span class="katex-mathml"><math><semantics><mrow><msub><mi>d</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">d_i</annotation></semantics></math></span><span aria-hidden="true" class="katex-html"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.84444em;vertical-align:-0.15em;"></span><span class="base textstyle uncramped"><span class="mord"><span class="mord mathit">d</span><span class="vlist"><span style="top:0.15em;margin-right:0.05em;margin-left:0em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord mathit">i</span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span></span></span></span>是第i个词项在文档d中的tf-idf权重</p> <h2 id="nosql数据库的特点"><a href="#nosql数据库的特点" class="header-anchor">#</a> NoSQL数据库的特点</h2> <ol><li>灵活的扩展性</li> <li>灵活的数据模型</li> <li>与云计算紧密结合</li></ol> <h3 id="关系数据库与nosql数据库对比"><a href="#关系数据库与nosql数据库对比" class="header-anchor">#</a> 关系数据库与nosql数据库对比</h3> <p>（1）关系数据库</p> <p>优势：以完善的关系代数理论作为基础，有严格的标准， 支持事务ACID四性，借助索引机制可以实现高效的查询， 技术成熟，有专业公司的技术支持</p> <p>劣势：可扩展性较差，无法较好支持海量数据存储，数据 模型过于死板、无法较好支持Web2.0应用，事务机制影响 了系统的整体性能等
（2）NoSQL数据库</p> <p>优势：可以支持超大规模数据存储，灵活的数据模型可以 很好地支持Web2.0应用，具有强大的横向扩展能力等</p> <p>劣势：缺乏数学理论基础，复杂查询性能不高，大都不能 实现事务强一致性，很难实现数据完整性，技术尚不成熟， 缺乏专业团队的技术支持，维护较困难</p> <h3 id="应用场景"><a href="#应用场景" class="header-anchor">#</a> 应用场景</h3> <p>•关系数据库应用场景：电信、银行等领域的关键业务系统，需 要保证强事务一致性</p> <p>•NoSQL数据库应用场景：互联网企业、传统企业的非关键业务 （比如数据分析）</p> <h3 id="典型的nosql数据库"><a href="#典型的nosql数据库" class="header-anchor">#</a> 典型的NoSQL数据库</h3> <p>通常包括键值数据库、列族数据库、文档数据库和图形
数据库</p> <h2 id="mecached数据库与redis数据库"><a href="#mecached数据库与redis数据库" class="header-anchor">#</a> mecached数据库与redis数据库</h2> <p>都是基于内存的分布式缓存系统，redis提供了比mecached更多的api接口，支持10w并发读写，建议用redis代替mecached</p> <h2 id="sequoia数据库"><a href="#sequoia数据库" class="header-anchor">#</a> sequoia数据库</h2> <p>使用json格式的文档数据库</p> <h2 id="hbase数据库"><a href="#hbase数据库" class="header-anchor">#</a> hbase数据库</h2> <p>分布式的面向列的非结构化数据库。
高可靠性，可伸缩，可在廉价pc搭建大规模结构化存储集群</p> <h2 id="mongodb数据库"><a href="#mongodb数据库" class="header-anchor">#</a> mongodb数据库</h2> <p>基于分布式文件存储的开源数据库系统，由c++编写，数据结构类似于json对象。</p> <h3 id="当处理cap的问题时-可以有几个明显的选择"><a href="#当处理cap的问题时-可以有几个明显的选择" class="header-anchor">#</a> 当处理CAP的问题时，可以有几个明显的选择：</h3> <ol><li><p>CA：也就是强调一致性（C）和可用性（A），放弃分区容忍性（P），最简单的做法是把所有与事务相关的内容都放到同一台机器上。很显然，这种做法会严重影响系统的可扩展性。传统的关系数据库（MySQL、SQL Server和PostgreSQL），都采用了这种设计原则，因此，扩展性都比较差</p></li> <li><p>CP：也就是强调一致性（C）和分区容忍性（P），放弃可用性
（A），当出现网络分区的情况时，受影响的服务需要等待数据
一致，因此在等待期间就无法对外提供服务</p></li> <li><p>AP：也就是强调可用性（A）和分区容忍性（P），放弃一致性
（C），允许系统返回不一致的数据</p> <h2 id="数据仓库定义"><a href="#数据仓库定义" class="header-anchor">#</a> 数据仓库定义</h2> <ul><li>为统一的历史数据分析提供坚实平台，对信息处理提供支持</li> <li>“数据仓库是一个面向主体的、集成的、时变的、非易失 的数据集合，支持管理过程的决策过程”—W. H. Inmon •</li></ul> <h2 id="oltp-与olap的区别"><a href="#oltp-与olap的区别" class="header-anchor">#</a> OLTP 与OLAP的区别</h2> <ul><li>OLTP面向顾客，OLAP面向市场</li> <li>OLTP主要ER模型，OLAP主要使用雪花模型和星形模型</li> <li>OLTP管理当前数据， OLAP管理历史数据</li> <li>OLTP关注一个企业内部的数据，OLAP关注汇总的数据</li> <li>OLTP访问由短的原子事务构成，OLAP多是复杂的只读查询</li> <li>OLTP的操作只要是读、写，索引和散列， OLAP主要是大量扫描，访问记录数量多，用户数少</li></ul> <h2 id="事实表与维表"><a href="#事实表与维表" class="header-anchor">#</a> 事实表与维表</h2> <p>维表是实际保存了所需字段的数据表，事实表由所需的维表的主键和一些度量数据组成。维表类似于er模型的实体集，事实表类似于er模型的联系集</p> <h2 id="数据仓库的模型"><a href="#数据仓库的模型" class="header-anchor">#</a> 数据仓库的模型</h2> <ul><li>星型模型：多个维表与一个事实表连接而成</li> <li>雪花模型：在星型模型的基础上，一些维表进一步连接另外的维表（常用于有多值属性的表）</li> <li>星座模型：多个事实表共享一个维表</li></ul> <h2 id="度量的三种分类"><a href="#度量的三种分类" class="header-anchor">#</a> 度量的三种分类</h2> <ol><li>分布式：可以先算出子集的结果，再将子集结果合并</li> <li>代数的：涉及分布式的代数函数，多个分布式运算</li> <li>整体的：对整个数据集度量，不能通过划分-合并子集计算</li></ol> <h2 id="三种数据仓库模型"><a href="#三种数据仓库模型" class="header-anchor">#</a> 三种数据仓库模型</h2> <ol><li>企业仓库：关于主题的所有信息，跨越整个组织</li> <li>数据集市：企业范围数据的子集，范围限于选定的用户</li> <li>虚拟仓库：操作视图的集合，少数是物化视图</li></ol></li></ol></div> <footer class="page-edit"><!----> <!----> <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh"><img alt="知识共享许可协议" src="" style="border-width:0"></a><br>本作品采用<a rel="license" href="http://creativecommons.org/licenses/by/4.0/">知识共享署名 4.0 国际许可协议</a>进行许可。

   
</footer> <div class="page-nav"><p class="inner"><span class="prev">
      ←
      <a href="/知识点总结/数字图像处理总结.html" class="prev">
        数字图像处理知识点
      </a></span> <span class="next"><a href="/知识点总结/数据库系统概念总结.html">
        数据库系统概念总结
      </a>
      →
    </span></p></div>  <footer style="text-align:center;"><a href="https://beian.miit.gov.cn">
    粤ICP备2021020303号</a></footer></main></div><div class="global-ui"><!----></div></div>
    <script src="/assets/js/app.54ea76a2.js" defer></script><script src="/assets/js/2.c554ece5.js" defer></script><script src="/assets/js/40.4252699c.js" defer></script>
  </body>
</html>
